//
//  HMOAthURLViewController.swift
//  我的微博
//
//  Created by 杨庆 on 15/10/13.
//  Copyright © 2015年 双元班. All rights reserved.
//

import UIKit
import SVProgressHUD //应用的指示器(转轮)
class HMOAthURLViewController: UIViewController ,UIWebViewDelegate{
    //MARK:-搭建WabView;
    private lazy var webView = UIWebView()
    //添加 webview的控件
    override func loadView() {
        view = webView
        webView.delegate = self
        title = "新浪微博"
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "关闭", style: UIBarButtonItemStyle.Plain, target: self, action: "close")
    }
    //添加的关闭的按钮
    func close(){
        SVProgressHUD.dismiss()
        //关闭界面的方法
        dismissViewControllerAnimated(true, completion: nil)
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        print(view.backgroundColor)
       //加载授权的页面;
        webView.loadRequest(NSURLRequest(URL: netWorkTools.sharedTool.oauthUrl()))
    }
    //MARK:-webview 的代理的实现;
    func webViewDidStartLoad(webView: UIWebView) {
        SVProgressHUD.show()
    }
    func webViewDidFinishLoad(webView: UIWebView) {
        SVProgressHUD.dismiss()
    }
/**
    1.如果请求的是 URL 包含的是回调的地址, 需要判断参数,否则继续加载
    2.如果请求参数中,包含code,可以从请求的url中获取请求码
    */
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        let urlString = request.URL!.absoluteString
        //判断是否包含回调的地址
        if !urlString.hasPrefix(netWorkTools.sharedTool.redirectUri){
            return true
        }
        print("判断参数")
        print(request.URL?.query)
        if let query = request.URL?.query where query.hasPrefix("code="){
        print("获取验证码")
            //从query 中来截取验证码
        let code
            = query.substringFromIndex("code=".endIndex)
            print(code)
            //TODO: 换取 token
            loadAccessToken(code)
        }else{
           close()
            print("取消")
        }
        return false
    }
    private func loadAccessToken(code : String)
    {
        //这个方法的作用是要求拿到 code 之后要求 看能否拿到token;
        netWorkTools.sharedTool.loadAccessToken(code) { (result, error) -> () in
        if error != nil || result == nil {
            self.netError()
            return
        }
            //字典转模型;
            //1.应用token 获取的用户的信息创建用户的帐号
            //2.异步的加载用户的信息
            //3.保存用户的信息(模型中来完成)
        UserAccount(dict: result!).loadUserInfo({ (error) -> () in
            if error != nil {
                self.netError()
                return
            }
            //发送通知切换 视图控制器
            NSNotificationCenter.defaultCenter().postNotificationName(HMRootViewControllerSwitchNotification, object: false)
            //关闭控制器,Modal 出来的控制器要求,一定注意需要dismiss!
            self.close()
            })
        }
    }
    deinit{
        print("88")
    }
    /// 加载网络出错
    func netError() {
        SVProgressHUD.showInfoWithStatus("您的网络不给力哟!!")
        //延迟一段时间再关闭
        let when = dispatch_time(DISPATCH_TIME_NOW,Int64(1*NSEC_PER_SEC))
        dispatch_after(when, dispatch_get_main_queue(), { () -> Void in
            self.close()
        })
    }
 }

